import { ref, onMounted, watch } from 'vue';
import { useChat } from './useChat'; // 假设 useChat 是一个模块

export function useAuth() {
  const isAuthenticated = ref(false);
  const authToken = ref(''); // 确保这是一个字符串
  const user = ref(null);

  // 初始化时从本地存储加载令牌
  onMounted(() => {
    const token = localStorage.getItem('authToken');
    const userData = localStorage.getItem('user');
    
    if (token) {
      // 验证它是字符串形式的令牌
      if (typeof token === 'string' && token.length > 20) {
        console.log(`Token loaded from storage: ${token.substring(0, 10)}...`);
        authToken.value = token;
        isAuthenticated.value = true;
      } else {
        console.error('Invalid token format in localStorage:', token);
        localStorage.removeItem('authToken'); // 移除无效令牌
      }
      
      if (userData) {
        try {
          user.value = JSON.parse(userData);
        } catch (e) {
          console.error('Failed to parse user data:', e);
          localStorage.removeItem('user');
        }
      }
    }
  });

  // 登录成功后保存令牌
  const login = (token, userData) => {
    if (!token || typeof token !== 'string') {
      console.error('Invalid token format during login:', token);
      return;
    }
    
    console.log(`useAuth: login called. Setting token and user.`); // 新增日志
    authToken.value = token;
    user.value = userData;
    localStorage.setItem('authToken', token);
    localStorage.setItem('user', JSON.stringify(userData));
    isAuthenticated.value = true; // 触发 watch
    console.log(`useAuth: isAuthenticated set to true.`); // 新增日志
  };

  // 登出时清除令牌
  const logout = () => {
    authToken.value = '';
    user.value = null; // 确保 user 也清空了
    isAuthenticated.value = false; // 触发 App.vue 中的 watch

    // 从本地存储清除
    localStorage.removeItem('authToken');
    localStorage.removeItem('user');

    console.log("Logout function executed, isAuthenticated set to false."); // 添加日志确认执行
  };

  const handleUnauthorized = () => {
    // 清除令牌并重定向到登录页
    logout();
    // 如果使用了路由，可以重定向到登录页
    // router.push('/login');
  };

  return {
    authToken, // 这个值在发送 API 请求时使用
    isAuthenticated,
    user,
    login,
    logout,
    handleUnauthorized
  };
}